package com.itjin.health.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itjin.health.domain.dto.UserApprovalRequest;
import com.itjin.health.domain.dto.UserUpdateRequest;
import com.itjin.health.domain.vo.UserVO;

import java.util.List;
import java.util.Map;

/**
 * 管理员服务接口
 */
public interface AdminService {

  /**
   * 分页获取用户列表
   *
   * @param current 当前页
   * @param size    每页大小
   * @param role    角色筛选（可选）
   * @param keyword 搜索关键词（可选，匹配用户名或学号）
   * @return 用户分页列表
   */
  Page<UserVO> listUsersByPage(long current, long size, String role, String keyword);

  /**
   * 获取待审核的管理员和教师账号列表
   *
   * @return 待审核账号列表
   */
  List<UserVO> getPendingAccounts();

  /**
   * 审核用户账号
   *
   * @param approvalRequest 审核请求
   * @return 审核结果
   */
  boolean approveUserAccount(UserApprovalRequest approvalRequest);

  /**
   * 更新用户信息
   *
   * @param updateRequest 更新请求
   * @return 更新结果
   */
  boolean updateUser(UserUpdateRequest updateRequest);

  /**
   * 删除用户
   *
   * @param userId 用户ID
   * @return 删除结果
   */
  boolean deleteUser(Integer userId);

  /**
   * 重置用户密码
   *
   * @param userId 用户ID
   * @return 新密码
   */
  String resetUserPassword(Integer userId);

  /**
   * 判断用户是否为管理员
   *
   * @param userId 用户ID
   * @return 是否为管理员
   */
  boolean isAdmin(Integer userId);

  /**
   * 判断用户是否为超级管理员
   *
   * @param userId 用户ID
   * @return 是否为超级管理员
   */
  boolean isSuperAdmin(Integer userId);

  /**
   * 判断用户是否为教师
   *
   * @param userId 用户ID
   * @return 是否为教师
   */
  boolean isTeacher(Integer userId);

  /**
   * 检查用户是否拥有指定角色
   *
   * @param userId 用户ID
   * @param role   角色名称
   * @return 是否匹配指定角色
   */
  boolean checkUserRole(Integer userId, String role);

  /**
   * 控制台概览数据
   * 
   * @return 统计数据
   */
  Map<String, Object> getDashboardSummary();
}